package com.tp2.etna.distribucion1.controller;

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.tp2.etna.distribucion1.modelo.ClienteModel;
import com.tp2.etna.distribucion1.modelo.EntregaDetalleModel;
import com.tp2.etna.distribucion1.modelo.EntregaModel;
import com.tp2.etna.distribucion1.modelo.EstadoEntregaModel;
import com.tp2.etna.distribucion1.service.ClienteService;
import com.tp2.etna.distribucion1.service.EntregaService;

@Controller
public class EntregaController {

	@Autowired
	private EntregaService entregaService;
	
	@Autowired
	private ClienteService clienteService;

	@RequestMapping(value = "/entrega", method = RequestMethod.GET)
	public ModelAndView inicioEntrega(ModelMap model) {
		
		long diaMillis = 1000*60*60*24;
		long time = System.currentTimeMillis();
		Date fecha = new Date(time);
		Date fechaAyer = new Date(new java.util.Date().getTime() - diaMillis);

		List<EntregaModel> listaEntrega = entregaService.listar(fechaAyer,fecha, 0, 0);
		List<ClienteModel> listaCliente = clienteService.listar();
		List<EstadoEntregaModel> listaEstadoEntrega = entregaService.listarEstado();

		String flagEntrega = "S";
		String flagGenerar = "S";
		
		if(listaEntrega.size() == 0)
		{
			flagEntrega = "N";
			flagGenerar = "N";
			
		}
		
		
		ModelAndView modelo = new ModelAndView("dist1_entregas", "lista",
				listaEntrega);
		modelo.addObject("hoy",fecha);
		modelo.addObject("ayer",fechaAyer);
		modelo.addObject("listaCliente", listaCliente);
		modelo.addObject("listaEstadoEntrega", listaEstadoEntrega);
		modelo.addObject("flagEntrega", flagEntrega);
		modelo.addObject("idCliente", 0);
		modelo.addObject("idEstadoEntrega", 0);
		modelo.addObject("flagGenerar", flagGenerar);

		return modelo;

	}

	@RequestMapping(value = "/entrega/modificar", method = RequestMethod.GET)
	public String modificarEntrega(HttpServletRequest rq) {
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date1 = null;
		
		try {
			date1 = sdf1.parse(rq.getParameter("fe"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Date fi = new Date(date1.getTime());

		Integer ie = Integer.parseInt(rq.getParameter("ie"));
		entregaService.modificarFechaEntrega(fi,ie);

		return "redirect:/entrega";

	}
	
	@RequestMapping(value = "/entrega/eliminar", method = RequestMethod.GET)
	public String eliminarEntrega(HttpServletRequest rq) {
		
		Integer ie = Integer.parseInt(rq.getParameter("ie"));
		
		entregaService.eliminarEntrega(ie);
			
		return "redirect:/entrega";

	}
	
	@RequestMapping(value = "/entregaOperacion", method = RequestMethod.GET)
	public ModelAndView redirigirEntrega(ModelMap model
										,@RequestParam String operacion
										,@RequestParam Integer idEntrega
										,@RequestParam String numeroEntrega
										,@RequestParam Date fechaEntrega
										,@RequestParam String cliente
										,@RequestParam String estadoEntrega) {
		
		String vista = "dist1_entregas";
				
		List<EntregaDetalleModel> listaDetalle = entregaService.listarEntregaDetalle(idEntrega);
		
		
		
		if(operacion.equals("ver"))
		{
			vista = "dist1_entregaVer";
		}else if(operacion.equals("mod"))
		{
			vista = "dist1_entregaModifica";
		}else if(operacion.equals("eli"))
		{
			vista = "dist1_entregaElimina";
		}else
		{
			vista = "dist1_entregas";
		}
			
		ModelAndView modelo = new ModelAndView(vista);
		modelo.addObject("listaDetalle", listaDetalle);
		modelo.addObject("numeroEntrega", numeroEntrega);
		modelo.addObject("fechaEntrega", fechaEntrega);
		modelo.addObject("cliente", cliente);
		modelo.addObject("estadoEntrega", estadoEntrega);
		modelo.addObject("idEntrega", idEntrega);

		return modelo;

	}

	@RequestMapping(value = "/entregas", method = RequestMethod.GET)
	public ModelAndView buscarEntrega(HttpServletRequest rq) {
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
		java.util.Date date1 = null;
		java.util.Date date2 = null;
		
		try {
			date1 = sdf1.parse(rq.getParameter("dtpFechaInicio"));
			date2 = sdf1.parse(rq.getParameter("dtpFechaFin"));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		Date fi = new Date(date1.getTime());
		Date ff = new Date(date2.getTime());

		Integer ic = Integer.parseInt(rq.getParameter("cliente"));
		Integer ie = Integer.parseInt(rq.getParameter("estadoEntrega"));

		List<EntregaModel> listaEntrega = entregaService.listar(fi,ff, ic, ie);
		List<ClienteModel> listaCliente = clienteService.listar();
		List<EstadoEntregaModel> listaEstadoEntrega = entregaService.listarEstado();

		
		String flagEntrega = "S";
		
		if(listaEntrega.size() == 0)
		{
			flagEntrega = "N";
			
		}
		
		ModelAndView modelo = new ModelAndView("dist1_entregas", "lista",
				listaEntrega);
		modelo.addObject("hoy",ff);
		modelo.addObject("ayer",fi);
		modelo.addObject("listaCliente", listaCliente);
		modelo.addObject("listaEstadoEntrega", listaEstadoEntrega);
		modelo.addObject("flagEntrega", flagEntrega);
		modelo.addObject("idCliente", ic);
		modelo.addObject("idEstadoEntrega", ie);

		return modelo;

	}

	@RequestMapping(value = "/generarEntrega", method = RequestMethod.GET)
	public ModelAndView generarEntrega(ModelMap model
										) {
		
		String vista = "dist1_entregaGenerar";
				
		ModelAndView modelo = new ModelAndView(vista);
		

		return modelo;

	}
	
	@RequestMapping(value="/procesarEntregas", method = RequestMethod.POST,produces={"application/json"})
	public @ResponseBody Integer  generarEntregas() {
		
		long diaMillis = 1000*60*60*24;
		long time = System.currentTimeMillis();
		Date fecha = new Date(time);
		Date fechaAyer = new Date(new java.util.Date().getTime() - (diaMillis*10));
		
		boolean resultado = false;
		int res = 0;
		
		resultado = entregaService.generarEntregaFactura(fechaAyer, fecha);
		resultado = entregaService.generarEntregaPedido(fechaAyer, fecha);
		
		res = 1;
		
		return res;
	}
	
	@RequestMapping(value = "/inicio", method = RequestMethod.GET)
	public ModelAndView redirigirEntrega(ModelMap model) {
		
		String vista = "index";
			
		ModelAndView modelo = new ModelAndView(vista);
	

		return modelo;

	}
	
	
}
